solving higher degree polynomial equations